<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

</head>
<body>
    <script>
        // 上节课回顾
        // // 在页面中输出0——100之间的整数，每行显示8个
        // function num(row,col){
        //     document.write('<table>')
        //     for(var i=0;i<row;i++){
        //         document.write('<tr>')
        //         for(var j=0;j<col;j++){
        //             document.write('<td>'+(j+i*8)+'</td>')
        //         }
        //         document.write('</tr>') 
        //     }
        //     document.write('</table>')     //超过了一百
        // }
        // num(13,8);

        // for(var i=0;i<=100;i++){
        //     document.write(i+' ')
        //     if(i%7==0 && i!=0){   //(i+1)%8==0
        //          document.write('<br/>')
        //      }
        // }

        // var count = 0;
        // for(var i=0;i<=100;i++){
        //     document.write(i+' ')
        //     count++;
        //     if(count==8){   
        //         count=0;
        //         document.write('<br/>')
        //      }
        // }


        // //在页面中输出0——200之间能被7整除的的整数，每行显示6个
        // var count = 0;
        // for(var i=0;i<=200;i++){
        //     if(i%7==0){
        //         document.write(i+' ')
        //         count++;
        //     }
        //     if(count==6){  
        //         count=0;
        //         document.write('<br/>')
        //      }
        // }

        // 函数的返回值 作用域 变量
        // 返回值 可以赋给变量或者表达式
        function fn3(){
            console.log(678);
            return;
            console.log(456);
        }
        fn3(); //678
        console.log( fn3() ) // 678 undefined
        //  return语句可以不带表达式（例如：return;），此时返回值为undefined
        // 函数中可以不出现 return 语句，仍会返回值，该值为 undefined
        // 函数不写return 或 return后没有值 函数依然有返回值 是undefined。
        
        // 函数 arguments是函数实参的一个集合
        function sum(x,y){
            // console.log(y); 当只传一个实参时，y不报错但是是undefined，加法时NaN
            console.log(x+y);  
            // console.log(arguments);  arguments是函数实参的一个集合
            var a=0;
            for(var i=0;i<arguments.length;i++){
                a+=arguments[i];
            }
            // console.log(a)
            return a;
        }
        
        sum(3); //NaN
        sum(3,5);  //8
        sum(3,5,8,9,5,2); //多传结果正常... 8
        // js当实参和形参不一样时不报错

        var res = console.log(sum(1,12,3,4,5)); // 13 25
        console.log(sum(1,2,3,4,5)); // 3 15

        //window是js的顶级对象,可以直接访问，不用声明
        // 我们声明的变量和函数，都加在了这个对象里面
        var a = 100;
        window.onload = function(){
            console.log('事件中调用');  // 最后打印
        }

        var fn = function(){
            console.log(123);
        }
        fn();
        console.log(window);
        console.log(a);
        console.log(window.a);

        // 作用域：变量的作用范围
        // 全局作用域：
            // 整个页面的(所有scrip标签内)
        // 局部(私有)作用域：
            // 只有函数才能生成局部作用域

        // 变量定义机制：
            // 一个变量定义在哪个作用域内
            // 就只在该作用域或其下级作用域能被访问
            // 在其上级作用域访问不到
        // 变量使用机制：
            // 使用一个变量时，就先在当前作用域内查找，找到后使用
            // 如果当前作用域没有，就去上级作用域查找，找到就用
            // 直到找到全局（window），如果没有就报错
        // 变量赋值机制：
             // 给一个变量赋值时，就先在当前作用域内查找，找到就赋值
            // 如果当前作用域内没有，就去上级作用域中查找，找到就赋值
            // 直到找到全局（window），如果全局没有，就将该变量声明为全局变量
        
        var num = 100;
        var b = 'abc';
        function fn1(){
            console.log(num);
            var a =200;
            // b = 300; //会把300赋给全局变量b
            var b =300;
            y = 1000;
            console.log(a);
            console.log(b)
        }
        // console.log(a);  报错 出了函数
        fn1();
        console.log(b);
        console.log(y);
        
    </script>
   
</body>
</html>